//
// Created by yanhai on 2021/5/2.
//

#include <iostream>
#include <thread>

class TA {
public:
    TA()
    {
        std::cout << "TA构造函数被执行了" << std::endl;
    }

    TA(const TA &ta)
    {
        std::cout << "TA拷贝构造函数被执行" << std::endl;
    }

    ~TA()
    {
        std::cout << "TA析构函数被执行" << std::endl;
    }

    void operator()()
    {
        std::cout << "我的线程operator()开始执行了" << std::endl;
        // ..
        std::cout << "我的线程operator()结束执行了" << std::endl;
    }
};

void test()
{
    std::cout << "创建线程前" << std::endl;
    // 线程类的参数是一个可调用对象
    // C++中的可调用对象：函数、函数指针，lambda表达式，重载函数调用运算符的类对象，bind创建的对象
    TA ta;
    std::thread t(ta);  // ta对象是拷贝到线程t对象中的，因此局部变量ta失效后，不会影响线程t
    t.join();

    std::cout << "创建线程后" << std::endl;
}

int main(int argc, char **argv)
{
    test();
    return 0;
}